package com.atguigu.bigdata.scala.chapter05

object Scala15_Function {

    def main(args: Array[String]): Unit = {

        // TODO 函数式编程 - 函数到底是什么？
        // java中没有函数的概念，那就说明编译的字节码中也不可能有函数
        // scala编译后的字节码中也不可能有函数，scala源码中有函数的概念
        // 马丁在编译时，一定将源码中函数转换成字节码中存在内存

        /* 下面的函数被编译为下面的字节码内容：

         private static final void test$1() {
              .MODULE$.println("test...");
         }

         函数被编译为java中方法, 修饰符为 private static final , 函数名也稍微有一些变化

         private表示作用域，只能内部使用
         static 表示静态，表示可以直接调用, 函数和对象无关
         final 表示方法不能重写，函数没有重写和重载的概念

         函数的名称在编译时会自动进行修改，所以不能让多个函数有相同的名称

         为什么函数在编译时要修改名称？因为要和方法区分开

         函数和方法可以重名，但是编译时，方法名不变，函数名自动修正

         默认情况下，如果同时存在相同名称的函数和方法，那么调用时，会调用函数

         如果不想调用函数，而是想调用方法。可以使用this关键字进行调用

         */
        def test(): Unit = {
            println("test...222")
        }

        this.test()
    }
    def test(): Unit = {
        println("test...1111")
    }

}
